<?php
/**
 * @see Zend_Form_Element_Xhtml
 */
require_once 'Zend/Form/Element/Xhtml.php';

/**
 * Элемент формы, реализующий загрузку файла через Blueimp File Upload
 * 
 * @category Phorm
 * @package JQuery_Form_Element
 * @name /Phorm/JQuery/Form/Element/MediaFile.php
 * @copyright phorm.ru
 * @since 19.03.2012
 * @author vladimir@kachalov.net
 */

class Phorm_JQuery_Form_Element_MediaFile extends Zend_Form_Element_Xhtml {
	
	/**
	 * Имя метода - помощника вида
	 * @var string
	 */
	public $helper = 'mediaFile';
	
	/**
	 * Объект переводчика
	 * @var object
	 */
	public $translate;
	
	/**
	 * Инициализируем переводчик и дергаем родительский конструктор
	 *
	 * @param mixed $spec
	 * @param array $options
	 */
	
	public function __construct($spec, $options = null) {
		
		$this->translate = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('Translate');
		parent::__construct($spec, $options);
		
	}
	
	/**
	 * Валидация элемента
	 *
	 * @param int $value
	 * @return boolean
	 */
	
	public function isValid($value) {
		
		$params = $this->getAttribs();
		if(!isset($params['mediatype'])) $params['mediatype'] = 'image';
		
		$this->setValue((int)$value);
        $value = $this->getValue();
        
        if($value===0 && $this->isRequired()) {
        	$this->_messages = array($this->translate->_('Не выбран файл'));
        	return false;
        }
        
        require_once 'Phorm/Media.php';
        $Media = new Phorm_Media();
        
        if($MediaInfo = $Media->getMediaInfo($value)) {
        	if($MediaInfo['mediatype'] == $params['mediatype']) {
        		return true;
        	} else {
        		$this->_messages = array($this->translate->_('Неверный тип файла'));
        		return false;
        	}
        } elseif($this->isRequired()) {
        	$this->_messages = array($this->translate->_('Не выбран файл'));
        	return false;
        }
        
        return true;
        
	}
	
	
	/**
     * Set element value
     * Значение может быть массивом MediaInfo или числом mediaid
     * Мы приводим все к числу mediaid
     *
     * @param  mixed $value
     * @return Zend_Form_Element
     */
	
    public function setValue($value) {
    	
    	if(is_array($value) && isset($value['mediaid'])) {
    		$value = (int)$value['mediaid'];
    	} else {
    		$value = (int)$value;
    	}
    	
        $this->_value = $value;
        
        return $this;
        
    }
	
}